import { Router } from 'express'
import {
  getAllSubjects,
  getSubjectsByLevel,
  getSubjectsByGrade,
  getSubjectsByDifficulty,
  getSubjectById,
  addSubject,
  updateSubject,
  deleteSubject,
  getAllLevels,
  getAllDifficulties
} from '../utils/subjectStore.js'

/**
 * 学习主题API路由模块
 * 提供学习主题的完整CRUD操作接口
 * 支持按学段、年级、难度等条件筛选查询
 */
const router = Router()

/**
 * GET /api/subjects
 * 获取学习主题列表，支持多种筛选条件
 * 查询参数：
 * - level: 按学段筛选 (primary/junior/senior/university)
 * - grade: 按年级筛选 (1-16)
 * - difficulty: 按难度筛选 (easy/medium/hard)
 * 如果不提供筛选条件，则返回所有主题
 */
router.get('/', (req, res) => {
  try {
    const { level, grade, difficulty } = req.query
    let subjects

    // 根据查询参数筛选主题
    if (level) {
      subjects = getSubjectsByLevel(level)
    } else if (grade) {
      subjects = getSubjectsByGrade(parseInt(grade))
    } else if (difficulty) {
      subjects = getSubjectsByDifficulty(difficulty)
    } else {
      // 无筛选条件时返回所有主题
      subjects = getAllSubjects()
    }

    // 返回成功响应（统一格式）
    res.json({
      code: 200,
      data: {
        list: subjects,
        total: subjects.length
      },
      msg: '获取学习主题成功'
    })
  } catch (error) {
    console.error('获取学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取学习主题失败' })
  }
})

/**
 * GET /api/subjects/:id
 * 根据ID获取单个学习主题的详细信息
 * @param {string} id - 学习主题的ID
 */
router.get('/:id', (req, res) => {
  try {
    const { id } = req.params
    const subject = getSubjectById(id)

    // 检查主题是否存在
    if (!subject) {
      return res.status(404).json({
        success: false,
        message: '学习主题不存在'
      })
    }

    // 返回主题详情
    res.json({ code: 200, data: subject, msg: '获取学习主题成功' })
  } catch (error) {
    console.error('获取学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取学习主题失败' })
  }
})

/**
 * POST /api/subjects
 * 创建新的学习主题
 * 请求体必须包含：name(名称), description(描述), level(学段)
 * 可选字段：icon(图标), grade(适用年级), difficulty(难度), prerequisites(前置知识), estimatedTime(预计时间), topics(知识点)
 */
router.post('/', (req, res) => {
  try {
    const subjectData = req.body

    // 验证必填字段
    if (!subjectData.name || !subjectData.description || !subjectData.level) {
      return res.status(400).json({
        success: false,
        message: '缺少必填字段：name, description, level'
      })
    }

    // 创建新主题
    const newSubject = addSubject(subjectData)

    if (!newSubject) {
      return res.status(500).json({ code: 500, data: null, msg: '添加学习主题失败' })
    }

    // 返回创建成功的响应
    res.status(201).json({ code: 200, data: newSubject, msg: '学习主题添加成功' })
  } catch (error) {
    console.error('添加学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '添加学习主题失败' })
  }
})

// 更新学习主题
router.put('/:id', (req, res) => {
  try {
    const { id } = req.params
    const updateData = req.body

    const updatedSubject = updateSubject(id, updateData)

    if (!updatedSubject) {
      return res.status(404).json({ code: 404, data: null, msg: '学习主题不存在或更新失败' })
    }

    res.json({ code: 200, data: updatedSubject, msg: '学习主题更新成功' })
  } catch (error) {
    console.error('更新学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '更新学习主题失败' })
  }
})

// 删除学习主题
router.delete('/:id', (req, res) => {
  try {
    const { id } = req.params
    const success = deleteSubject(id)

    if (!success) {
      return res.status(404).json({ code: 404, data: null, msg: '学习主题不存在或删除失败' })
    }

    res.json({ code: 200, data: true, msg: '学习主题删除成功' })
  } catch (error) {
    console.error('删除学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '删除学习主题失败' })
  }
})

// 获取所有学段
router.get('/levels/all', (req, res) => {
  try {
    const levels = getAllLevels()
    res.json({ code: 200, data: levels, msg: '获取学段信息成功' })
  } catch (error) {
    console.error('获取学段信息失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取学段信息失败' })
  }
})

// 获取所有难度等级
router.get('/difficulties/all', (req, res) => {
  try {
    const difficulties = getAllDifficulties()
    res.json({ code: 200, data: difficulties, msg: '获取难度等级成功' })
  } catch (error) {
    console.error('获取难度等级失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取难度等级失败' })
  }
})

// 获取特定学段的学习主题
router.get('/level/:level', (req, res) => {
  try {
    const { level } = req.params
    const subjects = getSubjectsByLevel(level)

    res.json({
      code: 200,
      data: {
        list: subjects,
        total: subjects.length
      },
      msg: '获取学段学习主题成功'
    })
  } catch (error) {
    console.error('获取学段学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取学段学习主题失败' })
  }
})

// 获取特定年级的学习主题
router.get('/grade/:grade', (req, res) => {
  try {
    const { grade } = req.params
    const subjects = getSubjectsByGrade(parseInt(grade))

    res.json({
      code: 200,
      data: {
        list: subjects,
        total: subjects.length
      },
      msg: '获取年级学习主题成功'
    })
  } catch (error) {
    console.error('获取年级学习主题失败:', error)
    res.status(500).json({ code: 500, data: null, msg: '获取年级学习主题失败' })
  }
})

export default router
